package com.pengxun.mall.service.impl;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import com.pengxun.mall.dao.StoreDao;
import com.pengxun.mall.dao.StoreGroupDao;
import com.pengxun.mall.dto.StoreDTO;
import  com.pengxun.mall.dto.StoreSearchDTO;
import com.pengxun.mall.model.Store;
import com.pengxun.mall.model.StoreGroup;
import com.pengxun.mall.service.StoreService;
import com.pengxun.mall.vo.StoreVO;
import com.szeastroc.common.jdbc.crud.SqlBuilder;
import com.szeastroc.common.jdbc.page.Page;
import com.szeastroc.common.utils.ValidationUtils;

@Service
public class StoreServiceImpl implements StoreService{

	@Resource
	private StoreDao storeDao;
	
	@Resource
	private StoreGroupDao storeGroupDao;
	
	@Override
	public int insert(StoreDTO storeDTO) {
		ValidationUtils.validate(storeDTO);
		Store store = new Store();
		BeanUtils.copyProperties(storeDTO, store);
		return storeDao.insert(store);
	}
	
    @Override
	public int batchInsert(List<StoreDTO> storeDTOs) {
	    ValidationUtils.validate(storeDTOs);
    	if(CollectionUtils.isEmpty(storeDTOs)) {
    		return 0;
    	}
    	List<Store> stores = new ArrayList<Store>();
    	for(StoreDTO storeDTO:storeDTOs) {
    		Store store = new Store();
    		BeanUtils.copyProperties(storeDTO, store);
    		stores.add(store);
    	}
		return storeDao.batchInsert(stores);
	}
	
	
    @Override
    public int update(StoreDTO storeDTO){
    	ValidationUtils.validate(storeDTO);
		Store store = new Store();
		BeanUtils.copyProperties(storeDTO, store);
        return storeDao.updateBy(store,"id");
    }
   	
    @Override
    public int delete(Integer  id){
        if(id==null){
            return 0;
         }
    	Store store = new Store();
    	store.setId(id);
       return storeDao.delete(store);
 	}
   
    @Override
    public List<StoreVO> findAll(){
         List<Store> stores = storeDao.findAll(new SqlBuilder(Store.class).build());
    	 List<StoreVO> storeVOs = new ArrayList<StoreVO>();
    	 for(Store store:stores) {
    		 StoreVO storeVO = new StoreVO();
    		 BeanUtils.copyProperties(store,storeVO);
    		 storeVOs.add(storeVO);
    	 }
         return storeVOs;
    }
    
    
    public Page findByPage(StoreSearchDTO storeSearchDTO){
             List<Store> stores = storeDao.find(storeSearchDTO);
    	 List<StoreVO> storeVOs = new ArrayList<StoreVO>();
    	 for(Store store:stores) {
    		 StoreVO storeVO = new StoreVO();
    		 BeanUtils.copyProperties(store,storeVO);
    		 StoreGroup storeGroup = storeGroupDao.findFirst(new SqlBuilder(StoreGroup.class).eq("id", store.getGroupId()).build());
    		 if(storeGroup!=null) {
    			 storeVO.setGroupName(storeGroup.getName());
    		 }
    		 storeVOs.add(storeVO);
    	 }
    	 
    	 Page page = new Page();
    	 BeanUtils.copyProperties(storeSearchDTO,page);
    	 page.setData(storeVOs);
         return page;
    };
    
    public StoreVO findById(Integer id){
          Store store = storeDao.findFirst(new SqlBuilder(Store.class).eq("id",id).build());
          StoreVO storeVO = new StoreVO();
    	  BeanUtils.copyProperties(store,storeVO);
    	  
    	  return storeVO;
    };

}
